package es.chaveweb.poZit.server.domain;

import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.NotPersistent;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import javax.validation.constraints.NotNull;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class PoZit4GoogleUser {
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Long pozit4GoogleUserId;

	@NotNull
	private String ownerUserId;

	@NotPersistent
	private PoZit poZit;

	@NotNull
	private Long poZitId;

	@NotPersistent
	private long version;

	public Long getId() {
		return this.getPozit4GoogleUserId();
	}

	public String getOwnerUserId() {
		return ownerUserId;
	}

	public void setOwnerUserId(String ownerUserId) {
		this.ownerUserId = ownerUserId;
	}

	public void save() {
		PersistenceManager em = entityManager();
		try {
			em.makePersistent(this);
		} finally {
			em.close();
		}
	}

	public PoZit getPoZit() {
		if (poZitId == null) {
			return null;
		} else if (poZit == null || !poZitId.equals(poZit.getId())) {
			poZit = PoZit.findPoZit(poZitId);
		}

		return poZit;
	}

	public void setPoZit(PoZit poZit) {
		this.poZit = poZit;
		this.poZitId = (poZit != null) ? poZit.getId() : null;
	}

	public Long getPoZitId() {
		return poZitId;
	}

	public void setPoZitId(Long poZitId) {
		this.poZitId = poZitId;
	}

	public Long getPozit4GoogleUserId() {
		return pozit4GoogleUserId;
	}

	public void setPozi4GoogleUserId(Long pozi4GoogleUserId) {
		this.pozit4GoogleUserId = pozi4GoogleUserId;
	}

	public long getVersion() {
		return this.version;
	}

	public static PoZit4GoogleUser findPoZit4GoogleUser(Long poZitId) {
		if (poZitId == null) {
			return null;
		}
		PersistenceManager em = entityManager();
		try {
			return em.getObjectById(PoZit4GoogleUser.class, poZitId);
		} finally {
			em.close();
		}
	}

	public static List<PoZit4GoogleUser> findAllNotesByUser(String googleUserId) {
		// TODO: Por hacer
		return null;
	}

	public static final PersistenceManager entityManager() {
		return PMF.get().getPersistenceManager();
	}
}
